package com.sjh.lib_app.bean

import android.bluetooth.BluetoothDevice
import android.graphics.Bitmap
import androidx.annotation.Keep
import androidx.databinding.ObservableField

/**
 *    author : SunJH
 *    date   : 2021/4/12 0012
 *    desc   :
 */
/**
 * 用户实体类
 */
data class UserBean(
    val token: String = "", //token
    val login_first: String = "", //是否第一个登录 1 第一次登录  2 非第一次登录
    val password_first: Boolean = false //是否学校管理员第一次登录
)

/**
 *    author : SunJH
 *    date   : 2021/4/8 0008
 *    desc   : 这是智能笔的数据结构
 */
data class BleDevBean(
    val bluetoothDev: BluetoothDevice,
    val name: String,
    val rssi: String,
    var isShow: Boolean = true
) {
    fun getRssiInfo(): String {
        return "${rssi}dbm"
    }

    override fun equals(other: Any?): Boolean {
        if (other == null) return false
        return if (other is BleDevBean) {
            other.bluetoothDev == this.bluetoothDev
        } else {
            false
        }
    }

    override fun hashCode(): Int {
        var result = bluetoothDev.hashCode()
        result = 31 * result + name.hashCode()
        result = 31 * result + rssi.hashCode()
        return result
    }

}


/**
 * 批改学生列表子项
 */
data class CheckStudent(
    val absent_id:String? = null,           //缺考id，在id不为空(有值)的情况下，表示该学生缺考
    var exam_id: String = "",       //考试id，该参数是从网页跳转带过来的
    val name: String = "",       //学生姓名
    var result_score: Float = 0f,   //学生成绩
    val sex: String = "",        //学生性别
    val caches: MutableList<PointIndexInfo> = mutableListOf(),////缓存的学生批改数据，当学生答题数据未请求到，但是老师已经批改了，需要先存起来
    var answer: AnswerCardInfo? = null,//学生答题情况
    /**
     *
     * 当前答题卡的学生笔迹 以key value 形式保存笔迹点
     * key是对应答题卡的pageId，bookId，sectionId，ownerId 组合，value是当前答题卡上的笔迹点
     */
    val statudentPenPointlist: MutableMap<String, MutableList<PenPoint>> = mutableMapOf(),
    val teacherPenPointlist: MutableMap<String, MutableList<PenPoint>> = mutableMapOf(), //当前答题卡的老师笔迹
    var correct_state: Int = 0,        //	批改状态 1:已确认成绩 2:部分批改 待确认 0为未批改
    val student_id: Int = -1  //学生id
) {
    fun getHeadPic(): String {
        val headAddress = StringBuffer()
        headAddress.append("https://tianli-kaoshiceping.oss-cn-chengdu.aliyuncs.com//headImage_")
        headAddress.append(if (sex == "1") "b" else "g")
        headAddress.append(if (student_id % 5 == 0) 1 else student_id % 5)
        headAddress.append(".png")
        return headAddress.toString()
    }

    fun getScore(): String {
        return when (correct_state) {
            0 -> "未批改"
            1 -> "${result_score}分"
            2 -> "批改中"
            else -> "未批改"
        }
    }

}

/**
 * 学生做的题数据实体
 */
data class QuestionData(
    val auto_correct_info: AutoCorrectInfo? = null, //自动阅卷阅卷内容
    var is_right: String = "",      //是否有批改成绩   99 主管客观 1全对 2错误 3半对
    val question_number: String = "-1", //第几题
    val question_type: String = "0",   //题目类型     1 2 选择题	4 判断题
    val question_id: String = "",    //题目id
    val right_answer: String = "",   //正确答案 多个答案会用,隔开
    val analyzing: String = "",      //解析
    var result_score: String = "0",    //得分
    var question: String = "",           //题目数据
    val points_image_url: String = "",     //有学生笔迹的答题卡图片
    var questionImg: Bitmap? = null,     //当前题目的bitmap图片对象
    val scoreCorrectItemList: ArrayList<CorrectScoreAddItem> = arrayListOf(),//小分批改的列表
    var split_startx: Float = 0f,    //当前题目x轴坐标开始点
    var split_starty: Float = 0f,    //当前题目y轴坐标开始点
    var split_height: Float = 0f,    //当前题目x轴坐标宽度
    var split_width: Float = 0f,    //当前题目y轴坐标高度

    var is_correct: Int = 0,         //老师是否批注 0没有批注  1已经批注
    var is_checking: Int = 0,        //是否当前正在查看的题 0，不是 其他 是
    var ten: Float = 0f,             //学生作答分数十位分
    var one: Float = 0f,             //学生作答分数个位分
    var smallNumber: Float = 0f,     //学生作答分数小数分
    val answer_num: Int = -1,        //答案选项数量
    val score: String = "",          //题目分数
    val owner_id: Int = -1,          //TQL数据
    val section_id: Int = -1,        //TQL数据
    val book_id: Int = -1,          //TQL数据
    val page_id: Int = -1,          //TQL数据
    val addScoreNum:Int = 0,        //添加小分次数
    val question_imgs:MutableList<String> = mutableListOf(),//题目图片列表
    val other_images: List<QuestionImgData>? = null,    //其他的图片数据，多张考试视图时会在这里面
    var correction_list: MutableList<CorrectAnswerData>? = null,//当前题目老师批改笔迹图片
    val type_name: String = ""          //题目类型 1,2,4 客观题	其他是主管题
) {
    fun getIsRight() = is_right.toIntOrNull()?:-1
    fun getQuestType() = question_type.toIntOrNull()?:-1
    fun getResultScore() = result_score.toFloatOrNull()?:0f

}

/**
 * 题目视图截图数据
 */
data class QuestionImgData(
    val book_id: String,
    val owner_id: String,
    val page_id: String,
    val paper_id: Int,
    val question_number: String = "5",
    val section_id: String = "110",
    val height: String,         //整张试卷高度
    val img_url: String,            //当前答题底图
    val points_image_url: String,   //当前题目带笔迹的底图
    val scoreCorrectItemList: ArrayList<CorrectScoreAddItem> = arrayListOf(),//小分批改的列表
    val split_height: Float = 0f,
    val split_startx: Float = 0f,
    val split_starty: Float = 0f,
    val split_width: Float = 0f,
    val startx: String,
    val starty: String,
    val width: String           //整张试卷宽度
)

/**
 * 教师批改答题数据
 */
data class CorrectAnswerData(
    val small_score: ArrayList<CorrectScoreAddItem> = arrayListOf(),//小分批改的列表
    val bookId: String = "",
    val exam_id: String = "",
    var image_url: String = "",      //当前题目批改图片
    val ownerId: String = "",
    val pageid: String = "",
    val sectionId: String = "",
    val student_id: String = ""
)

/**
 * 笔迹点的实体类
 */
data class PenPoint(
    var page_id: Int, // 该笔记属于哪一页
    var book_id: Int, //该笔迹属于哪一页
    val color: Int = 6,  //当前笔迹的颜色 6 黑色 1 红色 ColorUtil.SetPenColor()
    val dotType: Int,   //	笔迹点类型 0落笔，1移动，2起笔
    val f: Int,         //		压力值，将来根据这个设置线条粗细
    val fx: Int,        //	x坐标小数部分
    val fy: Int,        //	y坐标小数部分
    val x: Int,         //	x坐标整数部分
    val y: Int          //	y坐标整数部分

)

/**
 * 自动批改信息
 */
data class AutoCorrectInfo(
    val answer: String = "",         //自动识别的学生答案
    val is_right: Int = 0,          //自动批改情况 1正确 2错误 3半对
    val result_score: Float = -1f       //自动给批改学生得分
)

/**
 * 学生答题卡数据实体
 */
data class AnswerCardInfo(
    val list: MutableList<QuestionData>,           //学生作答的题目列表
    val paper_total_score: Float = 0f              //答题卡总共分数
)


/**
 * 点读码识别信息
 */
data class PointIndexInfo(
    //当识别出来类型为 matrix_type ==2 表示为题目分数
    val card_id: Int,           //答题卡id
    val matrix_type: Int,       //点读码识别类型 1 学生信息卡 2答题卡
    val paper_id: Int,          //试卷id
    val question_number: Int,   //题目编号
    val score: Float = 0f,        //当前选中分数
    val score_type: Int = 0,         //分数类型 1:个位分 2:十位分 3：小数分   当type为2时 1: 正确 2：错误 3：半对
    val type: Int = 1,              //用来区分题目类型， 当type为2时，需要使用填空题的处理逻辑

    //当识别类型 matrix_type ==1 表示识别出来的是学生信息，有以下字段
    val exam_manage_id: String, //考试id
    val class_id: String,        //班级id
    val student_id: String,      //学生id  需要用这个学生id去匹配学生列表，选中当前批改学生
    val student_name: String,    //学生姓名
    val student_number: String  //学生学号
)


/**
 * 已经配置好的蓝牙地址
 */
data class NetBleInfo(
    val current: Boolean,   //是否为当前选择的笔
    val mac: String,        //mac地址
    val status: Int        //在线状态1在线，0离线
)

/**
 *上传图片到oss需要的 签名数据
 */
data class SignatureData(
    val dir: String = "",        //上传文件目录
    val expire: Int = -1,        //过期时间 毫秒
    val signature: String = ""   //签名
)

/**
 * 小分批改的数据实体类
 */
data class CorrectScoreAddItem(
    var score: Float,
    var x: Float,
    var y: Float
)

/**
 * 分数上传成功之后当前学生的批改状态
 *  1:已批改 2:部分批改 待确认 null为未批改
 */
data class UpLoadScore(val correct_state: Int,
                       val result_score:Float = 0f
)

/**
 * 专题讲解的试题bean
 */
data class QuestionExplainBean(
    val answer:String="",          //答案
    val analysis:String="",        //解析
    val question_id: String="",    //问题id
    val score: String="",          //题目分值
    val title: String=""          //题干
)